{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "b0a86240-dbae-4325-bea5-6fe7aa1518d2",
   "metadata": {},
   "source": [
    "# 聚类"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b336722c-71ff-45fd-b9b3-84a2dbfbadef",
   "metadata": {},
   "source": [
    "## 支持向量机（SVM）、鸢尾花-SVM模型训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "40527090-d14c-484f-999f-4e591000b49a",
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from scipy import stats\n",
    "\n",
    "# use seaborn plotting defaults\n",
    "import seaborn as sns; sns.set()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "id": "883a1796-32c9-4bec-8766-644f4e291dd3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>lris</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>5.1</td>\n",
       "      <td>3.5</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "      <td>Iris-setosa</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4.9</td>\n",
       "      <td>3.0</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "      <td>Iris-setosa</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>4.7</td>\n",
       "      <td>3.2</td>\n",
       "      <td>1.3</td>\n",
       "      <td>0.2</td>\n",
       "      <td>Iris-setosa</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4.6</td>\n",
       "      <td>3.1</td>\n",
       "      <td>1.5</td>\n",
       "      <td>0.2</td>\n",
       "      <td>Iris-setosa</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5.0</td>\n",
       "      <td>3.6</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "      <td>Iris-setosa</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     1    2    3    4         lris\n",
       "0  5.1  3.5  1.4  0.2  Iris-setosa\n",
       "1  4.9  3.0  1.4  0.2  Iris-setosa\n",
       "2  4.7  3.2  1.3  0.2  Iris-setosa\n",
       "3  4.6  3.1  1.5  0.2  Iris-setosa\n",
       "4  5.0  3.6  1.4  0.2  Iris-setosa"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 利用pandas导入csv数据，查看前5行导入结果看是否正常\n",
    "import pandas as pd\n",
    "credit_df = pd.read_csv(\"d:/work/homework/irisdata.txt\", header=None)\n",
    "#源DataFrame中是没有索引的，此处加上索引\n",
    "new_column_names =['1','2','3','4','lris']\n",
    "credit_df.columns = new_column_names\n",
    "credit_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "b107163a-2a33-4c72-b499-e4efb003166c",
   "metadata": {},
   "outputs": [],
   "source": [
    "trainData_X = credit_df.drop(columns=['lris'])\n",
    "trainData_y=credit_df['lris']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "9407d950-17d3-4343-a4fb-25a2d7d1403b",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "X_train,X_test,y_train,y_test  =  train_test_split(trainData_X , trainData_y,test_size=0.3, random_state=1024)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "7e79b949-9aba-4d33-8196-90da296e833b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-2 {color: black;background-color: white;}#sk-container-id-2 pre{padding: 0;}#sk-container-id-2 div.sk-toggleable {background-color: white;}#sk-container-id-2 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-2 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-2 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-2 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-2 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-2 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-2 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-2 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-2 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-2 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-2 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-2 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-2 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-2 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-2 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-2 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-2 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-2 div.sk-item {position: relative;z-index: 1;}#sk-container-id-2 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-2 div.sk-item::before, #sk-container-id-2 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-2 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-2 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-2 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-2 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-2 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-2 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-2 div.sk-label-container {text-align: center;}#sk-container-id-2 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-2 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-2\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>SVC(C=10000000000.0, kernel=&#x27;linear&#x27;)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-2\" type=\"checkbox\" checked><label for=\"sk-estimator-id-2\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">SVC</label><div class=\"sk-toggleable__content\"><pre>SVC(C=10000000000.0, kernel=&#x27;linear&#x27;)</pre></div></div></div></div></div>"
      ],
      "text/plain": [
       "SVC(C=10000000000.0, kernel='linear')"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.svm import SVC # \"Support vector classifier\"\n",
    "model = SVC(kernel='linear', C=1E10)   # “核心是线性的”\n",
    "model.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "1e3689cd-2cc3-4bfe-a6e6-4ad769394ab6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[5.1, 3.8, 1.9, 0.4],\n",
       "       [5.1, 3.3, 1.7, 0.5],\n",
       "       [6.2, 2.2, 4.5, 1.5],\n",
       "       [5.7, 2.6, 3.5, 1. ],\n",
       "       [5.9, 3.2, 4.8, 1.8],\n",
       "       [6.7, 3. , 5. , 1.7],\n",
       "       [6.3, 2.8, 5.1, 1.5],\n",
       "       [4.9, 2.5, 4.5, 1.7],\n",
       "       [6. , 3. , 4.8, 1.8]])"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.support_vectors_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "40fdec26-cc58-4c95-9658-501de103681b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                 precision    recall  f1-score   support\n",
      "\n",
      "    Iris-setosa       1.00      1.00      1.00        14\n",
      "Iris-versicolor       1.00      0.88      0.93        16\n",
      " Iris-virginica       0.88      1.00      0.94        15\n",
      "\n",
      "       accuracy                           0.96        45\n",
      "      macro avg       0.96      0.96      0.96        45\n",
      "   weighted avg       0.96      0.96      0.96        45\n",
      "\n",
      "[[14  0  0]\n",
      " [ 0 14  2]\n",
      " [ 0  0 15]]\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import classification_report\n",
    "from sklearn.metrics import confusion_matrix\n",
    "from sklearn.metrics import roc_curve\n",
    "from sklearn.metrics import auc\n",
    "\n",
    "# 利用模型对测试集进行预测，输出target预测标签值和概率\n",
    "y_test_pred = model.predict(X_test)\n",
    "#y_test_prob = model.predict_proba(X_test)\n",
    "\n",
    "# 分类评估汇总报告classification_report\n",
    "print(classification_report(y_test,y_test_pred))\n",
    "\n",
    "# 误分类矩阵 confusion_matrix\n",
    "print(confusion_matrix(y_test,y_test_pred))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8494730d-a6e0-4cba-bdec-bb146b4408fa",
   "metadata": {},
   "source": [
    "## K均值算法、鸢尾花划分图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "4b13f0c1-44f1-46a0-bfe4-4dba4e659c3d",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import sklearn\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e12c546c-868e-488f-8389-57dae811deb5",
   "metadata": {},
   "source": [
    "### 导入数据和聚类分类图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "e8440033-62cb-4152-89f7-8de5488ecfb7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>lris</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>5.1</td>\n",
       "      <td>3.5</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "      <td>Iris-setosa</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4.9</td>\n",
       "      <td>3.0</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "      <td>Iris-setosa</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>4.7</td>\n",
       "      <td>3.2</td>\n",
       "      <td>1.3</td>\n",
       "      <td>0.2</td>\n",
       "      <td>Iris-setosa</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4.6</td>\n",
       "      <td>3.1</td>\n",
       "      <td>1.5</td>\n",
       "      <td>0.2</td>\n",
       "      <td>Iris-setosa</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5.0</td>\n",
       "      <td>3.6</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "      <td>Iris-setosa</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     1    2    3    4         lris\n",
       "0  5.1  3.5  1.4  0.2  Iris-setosa\n",
       "1  4.9  3.0  1.4  0.2  Iris-setosa\n",
       "2  4.7  3.2  1.3  0.2  Iris-setosa\n",
       "3  4.6  3.1  1.5  0.2  Iris-setosa\n",
       "4  5.0  3.6  1.4  0.2  Iris-setosa"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 利用pandas导入csv数据，查看前5行导入结果看是否正常\n",
    "import pandas as pd\n",
    "credit_df = pd.read_csv(\"d:/work/homework/irisdata.txt\", header=None)\n",
    "#源DataFrame中是没有索引的，此处加上索引\n",
    "new_column_names =['1','2','3','4','lris']\n",
    "credit_df.columns = new_column_names\n",
    "credit_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "7a79d123-6176-4ade-8402-ae644ac794d9",
   "metadata": {},
   "outputs": [],
   "source": [
    "df = credit_df.drop(columns=['lris'])\n",
    "# 转为array\n",
    "\n",
    "#将 DataFrame df 转换为一个 NumPy 数组，并将这个数组赋值给变量 X_ori。.values 属性用于从 DataFrame 中提取底层的 NumPy 数组\n",
    "X_ori=df.values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "bc6011a6-cacd-407a-b867-471cf7cfb57f",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 标准化\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "std = StandardScaler()\n",
    "X = std.fit_transform(X_ori*1.0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "44f0ae7f-8081-4f7c-9a96-aada94983fd1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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aVlwV3u6bKyuFkNxitUVYiiusTrC4WRk5cqVmDZtGjp27IjZs2dDpVIBACpUqICEhASLsqa/AwICHJ2MBYPBaPG/tWG93vZ3rlDOmXWbc/VYi9NyLc4xMNaiL2c0PG1UNg27aqyuFkNxitUVYiiusTrCoY6dVatWYerUqXj77bcxb948MREBgJCQEJw8eRIGg0H87M8//0S1atWe6X4RIiIiKtnsTkauX7+O6dOno2PHjhg8eDASExPx8OFDPHz4EGlpaejVqxfS09Mxfvx4XL16FRs2bMDy5csxePDgwoyfiIiIijm7u2l27NgBnU6HXbt2YdeuXRbfhYeHY+bMmVi6dCmmTZuG8PBw+Pv7Y8yYMQgPD3d60ERERFRy2J2MDBkyBEOGDMmzTP369fHzzz8/c1BERET0/HD8YWAiIiIiJ2IyQkRERJJiMkJERESSYjJCREREkmIyQkRERJJiMkJERESSYjJCREREkmIyQkRERJJiMkJERESSYjJCREREkmIyQkRERJJiMkJERESSYjJCREREkmIyQkRERJJiMkJERESSYjJCREREkmIyQkRERJJiMkJERESSYjJCREREkmIyQkRERJJiMkJERESSYjJCREREkmIyQkRERJJiMkJERESSYjJCREREkmIyQkRERJJiMkJERESSYjJCREREkmIyQkRERJJiMkJERESSYjJCREREkmIyQkRERJJiMkJERESSYjJCREREkmIyQkRERJJiMkJERESSYjJCREREkmIyQkRERJJiMkJERESSYjJCREREkmIyQkRERJJiMkJERESSeqZkZOHChXjnnXcsPhs3bhxq1apl8a9NmzbPFCQRERGVXMqCjhgdHY358+cjJCTE4vNLly5hyJAh6Nevn/iZQqEoeIRERERUojmcjDx48ADjx4/HyZMnUa1aNYvvDAYDrl69io8++gj+/v5OC5KIiIhKLoe7ac6fPw9vb29s3rwZDRo0sPjuxo0b0Gg0CAoKclqAREREVLI53DLSvn17tG/f3up3ly9fhkwmw/Lly7F//37I5XKEhYVhxIgR8PT0LHCQCoXc4n9bw65ezll1m3P1WIvTci3uMTDWoi0nVxjFv+UKmUvH6ooxFKdYXSGG4hirI2SCIAgOj/WPzz//HHfu3MGPP/4IAJg/fz4WL16MkSNHIiwsDDdv3sRXX32FihUr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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import scipy\n",
    "from scipy.cluster import hierarchy\n",
    "dendro=hierarchy.dendrogram(hierarchy.linkage(X_ori,method='ward'))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0177c613-a6ae-4551-8a32-9d4bcfe06d12",
   "metadata": {},
   "source": [
    "### 肘状图判断大类数量"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "413747ce-9187-491c-83f0-701e0bcaefc2",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\anacoda\\anacoda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:870: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n",
      "  warnings.warn(\n",
      "D:\\anacoda\\anacoda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1382: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n",
      "D:\\anacoda\\anacoda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:870: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n",
      "  warnings.warn(\n",
      "D:\\anacoda\\anacoda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1382: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n",
      "D:\\anacoda\\anacoda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:870: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n",
      "  warnings.warn(\n",
      "D:\\anacoda\\anacoda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1382: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n",
      "D:\\anacoda\\anacoda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:870: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n",
      "  warnings.warn(\n",
      "D:\\anacoda\\anacoda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1382: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n",
      "D:\\anacoda\\anacoda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:870: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n",
      "  warnings.warn(\n",
      "D:\\anacoda\\anacoda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1382: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n",
      "D:\\anacoda\\anacoda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:870: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n",
      "  warnings.warn(\n",
      "D:\\anacoda\\anacoda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1382: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n",
      "D:\\anacoda\\anacoda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:870: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n",
      "  warnings.warn(\n",
      "D:\\anacoda\\anacoda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1382: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n",
      "D:\\anacoda\\anacoda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:870: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n",
      "  warnings.warn(\n",
      "D:\\anacoda\\anacoda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1382: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n",
      "D:\\anacoda\\anacoda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:870: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n",
      "  warnings.warn(\n",
      "D:\\anacoda\\anacoda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1382: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'wcss: sum of dist. of sample to their closest cluster center')"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAj8AAAHJCAYAAABqj1iuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB9G0lEQVR4nO3deVhU5fsG8PvMDMM+sggMKgK5IS64SxmKmlaaFlq/Fvd9jdRyS3Mpl8pdEVdcyswlzFLrW2alpaa4a2pugAurbMM+MDO/P5BJApUDMw4z3J/r8hLOOXO4nzaf3vOe9xV0Op0ORERERNWExNQBiIiIiJ4mNj9ERERUrbD5ISIiompFdPMzevRoHDt2zBhZiIiIiIxOdPMTFRUFqVRqjCxERERERie6+enQoQN2796N/Px8Y+QhIiIiMiqZ2A9YW1vjxx9/xMGDB1GnTh24urqWOC8IArZu3WqwgERERESGJLr5SUhIQMuWLfXf/3eZIC4bRERERFWZwEUOiYgMQ6fTQRAEU8cgoieo8KvuGRkZOHToEL7++mukpqbi1q1bHPUhslDTpk1Do0aNHvmrffv2+msHDBiAAQMG6L9v1KgRVq1aZYrYpQwYMACNGjXCW2+99chrJk6ciEaNGmHatGmi7n369GmMGjVK//3du3fRqFEj7Nmzp8J5H8fY9yeyZKIfewHAmjVrsG7dOuTl5UEQBDRv3hzLli1Deno6Nm3aBIVCYeicRGRibm5uCAsLK/OcTFah/5SYhEQiwblz5xAfHw9PT88S53Jzc/H7779X6L67d+/GjRs3DJCQiIxN9MjPtm3bsGrVKgwZMgS7du3Sj/YMGjQId+7cwYoVKwwekohMTy6Xo0WLFmX+atq0qanjlZu/vz+sra3xv//9r9S5X3/9FdbW1vDw8DBBMiJ6WkQ3P19++SVGjhyJ9957D02aNNEfDwoKwoQJE/Drr78aNCARmb+srCx88MEHaNmyJZ599lnMmzcPubm5Ja754Ycf0KdPH7Rs2RIdOnTArFmzkJGRAQDYunUrGjdujLS0NP31a9euRaNGjfDHH3/ojx0+fBiNGjXCnTt3HpnFzs4OnTp1wo8//ljq3A8//ICXXnqp1EiWVqvF+vXr0a1bNzRt2hQvvvgivvzyS/35adOm4dtvv8W9e/dKPYpKTk5GaGgoWrZsiXbt2uGjjz5CTk6O/rxGo8FXX32FXr16oXnz5ggODsbixYtLLSfy888/o3fv3mjevDlCQkJw9erVR9ZIRI8nuvmJi4tDu3btyjz3zDPP4P79+5UORURVU2FhYZm/njTf78svv0RWVhaWL1+OUaNGYffu3Zg5c6b+fHh4OCZOnIiAgACsXLkS48aNw08//YQBAwYgLy8PnTt3hlarxV9//aX/TPHXUVFR+mN//PEHGjRoAC8vr8fm6dGjB86fP4+4uDj9saysLBw5cgSvvPJKqevnzJmDlStXonfv3li7di1eeuklLFiwAKtXrwYAjB07Fp06dYKbmxt27tyJ4OBg/WdXrFgBT09PhIeHY+DAgdi1a1eJOVCzZs3CggUL0KVLF6xZswb9+vXDtm3bMHbsWP1f119//RWhoaFo0KABwsLC8PLLL2Py5MmPrZGIHk30g3pPT0+cPXsWzz33XKlzly5dKvUMnYgsw71790qM9j7svffew9ixYx/5WV9fX4SHh0MikaBTp04QBAELFy7E2LFjUbNmTaxZswZvvPEGZs+erf9Mw4YN0a9fP+zZswfvvPMOfH19cfz4cbz88stQq9U4c+YMmjRpgpMnT+o/c+TIEbz44otPrCU4OBh2dnb43//+h6FDhwIADh48CBcXF7Ru3brEtdHR0di1axcmTZqEkSNHAgCef/55CIKAdevW4Z133kHdunXh4uKifzQIQD+68+KLL2L69OkAgGeffRZHjx7VN243btzAN998gwkTJmDMmDEAihaSdXd3x5QpU3DkyBF06tQJq1evRpMmTbBkyRIAQMeOHQFA/z0RiSN65Of111/H2rVrERERgZiYGABF/5L/9NNPWLduHUJCQgydkYiqADc3N3zzzTdl/nr99dcf+9kXX3wREsm//7np3r07dDod/vrrL5w7dw5qtRq9evUq8Zk2bdqgdu3aOHHiBICihqV4X8HTp09DIpFg0KBBuHTpEnJzcxEbG4vY2Fh07tz5ibXY2NigS5cuJR59HThwAD169Cj1qvpff/0FnU6HLl26lBjt6tKlC/Lz83H69OnH/qw2bdqU+N7LywsqlQoA9I3bf2vv2bMnpFIpTpw4gby8PPz999/o2rVriWtefvnlJ9ZJRGUTPfIzYsQI3L17F4sXL8bixYsBAAMHDgRQ9C/ww696EpHlkMvlaNasWYU+W7NmzRLfF68Mr1Kp9PN6/ntN8bHMzEwAQKdOnbB582bcuXMHf/31F1q1aoXnn38eBQUFOHPmDG7evAlnZ2f9yMuTvPzyyxg3bhzu3r0Le3t7HD9+HBMmTCh1XXp6OoCihqQsiYmJj/05tra2Jb6XSCT6x1nFtbu5uZW4RiaTwdnZGZmZmcjIyIBOp4OLi0uJa9zd3R/7c4no0UQ3P4Ig4OOPP8bQoUPx119/IT09HY6OjmjXrh0aNGhgjIxEZOaKRzqKJScnAyhqgmrUqAEAuH//PurVq1fquuL5O23atIGDgwOOHz+Ov/76C507d4arqyvq16+PkydP4u+//0ZwcHCJEabH6dixIxwdHfHTTz/B0dERderUKfOtteKlO7Zu3Qp7e/tS52vVqlWun1eW4tqTk5NRp04d/fGCggKkpaXB2dkZTk5OkEgkpeZTFjdlRCSe6MdeYWFhSExMhI+PD9566y2MHj0a/fr1Q4MGDXD37l18/PHHxshJRGbs4TeygKJHTIIgoF27dggICIBcLse+fftKXHPq1CnExcWhVatWAAArKyt06NABv/76K/7++2/9woqBgYH4448/EBUVVa5HXsXkcjm6du2Kn3/+GT/++OMjR3batm0LAEhLS0OzZs30v9LT07F8+XJ9E1LeputhxS+P/Lf2AwcOQKPRoHXr1rC2tkbLli3x888/l5hYzjdriSpO9MjP6tWr0bFjxzLXwTh//jx2796NWbNmGSQcEVUdarUa586de+T5hg0bws7Orsxzly5dwowZM/DKK6/g4sWLWLlyJV5//XX4+PgAAEaOHImwsDBYWVmha9euuHv3LlasWIH69eujT58++vt06tQJH374Iezs7PSP4Nq3b49t27bpmyMxevTogVGjRkEikZR4++y/dfXu3RsfffQR7t27h6ZNmyI6OhrLli1DnTp19DUoFArcv38fhw8fRuPGjcv18+vXr4+QkBCEhYUhLy8P7du3x5UrVxAWFob27dsjKCgIADBp0iQMGjQI48ePx5tvvomYmBisWbNGVK1E9K9yNT9vvfUWzp8/D6Bo75o333zzkddWdE4AEVVtycnJj/13/5tvvnnkv/9jxozB5cuXMXr0aDg6OmL48OEYP368/vy7776LmjVrYtu2bdi9ezecnJzw0ksvYcKECSXmzBS/KdaqVSv9Wjzt2rXTjyI5ODiIqum5556D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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.cluster import KMeans\n",
    "wcss=[]\n",
    "for i in range(1,10):\n",
    "    kmeans=KMeans(n_clusters=i,init='k-means++',)\n",
    "    kmeans.fit(X_ori)\n",
    "    wcss.append(kmeans.inertia_)\n",
    "    \n",
    "plt.plot(range(1,10),wcss)\n",
    "plt.title('Elbow Method')\n",
    "plt.xlabel('No. of cluster')\n",
    "plt.ylabel('wcss: sum of dist. of sample to their closest cluster center' )"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bb38d445-4d8b-4f2d-97a3-b20872d91296",
   "metadata": {},
   "source": [
    "### 给出kmeans的预测和预测准确率"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "b2713e0f-3099-449b-a556-3a550b133ce7",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\anacoda\\anacoda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:870: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n",
      "  warnings.warn(\n",
      "D:\\anacoda\\anacoda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1382: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n"
     ]
    }
   ],
   "source": [
    "kmeans_1=KMeans(n_clusters=3)\n",
    "kmeans_1.fit(X)\n",
    "cluster_pred=kmeans_1.predict(X)\n",
    "cluster_pred_2=kmeans_1.labels_\n",
    "cluster_center=kmeans_1.cluster_centers_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "df449a30-8a8d-4be2-b67a-ca7924f9e716",
   "metadata": {},
   "outputs": [],
   "source": [
    "cluster = pd.DataFrame(cluster_pred,columns=['cluster'])\n",
    "df_cluster = pd.concat([credit_df,cluster],axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "194bb419-d15f-426d-8193-9d7b7453b739",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
       "       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
       "       1, 1, 1, 1, 1, 1, 2, 2, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2,\n",
       "       0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0,\n",
       "       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 2, 2, 2, 0, 2, 2, 2,\n",
       "       2, 2, 2, 0, 0, 2, 2, 2, 2, 0, 2, 0, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2,\n",
       "       2, 0, 0, 2, 2, 2, 0, 2, 2, 2, 0, 2, 2, 2, 0, 2, 2, 0])"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cluster_pred"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "id": "13b7525e-b1d8-4995-b100-d2c3a576543a",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 观察数字对应的类别\n",
    "df_cluster.to_csv('path_to_file.csv', index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "id": "eada3b6a-ba98-4dea-a95d-7c15dbb84453",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Precision: 0.83\n"
     ]
    }
   ],
   "source": [
    "true_positives = 0  # 正确分类的样本数\n",
    "false_positives = 0  # 错误分类的样本数\n",
    "\n",
    "for i in range(150):\n",
    "    if df_cluster['lris'][i] == 'Iris-setosa' and df_cluster['cluster'][i] == 1:\n",
    "        true_positives += 1\n",
    "    elif df_cluster['lris'][i] == 'Iris-versicolor' and df_cluster['cluster'][i] == 0:\n",
    "        true_positives += 1\n",
    "    elif df_cluster['lris'][i] == 'Iris-virginica' and df_cluster['cluster'][i] == 2:\n",
    "        true_positives += 1\n",
    "    else:\n",
    "        false_positives += 1\n",
    "\n",
    "# 计算精确度\n",
    "precision = true_positives / (true_positives + false_positives) if (true_positives + false_positives) > 0 else 0\n",
    "\n",
    "print(f\"Precision: {precision:.2f}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "id": "0d966ba3-c173-4c0b-84b3-15874c2e89e1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "25"
      ]
     },
     "execution_count": 84,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "false_positives"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "33244a1a-0c5e-4f03-b74b-c8e7cba282fe",
   "metadata": {
    "tags": []
   },
   "source": [
    "# 课后作业：降维、聚类图、聚类分类、回比准确值(19min)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f1dfa87e-ac4f-4be1-9653-518afda539fc",
   "metadata": {},
   "outputs": [],
   "source": [
    "对wine做PCA的降维到两维，使用处理过的数据做聚类。画肘部和层状聚类图，估算分类，用kmeans做聚类并给出准确值"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8a06936e-09f1-4b2f-b1d2-28205e199e26",
   "metadata": {},
   "source": [
    "## 导入数据和标准化变量"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "7ce87f7a-2be4-47b8-8199-cb0ad13a69a0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>column_0</th>\n",
       "      <th>column_1</th>\n",
       "      <th>column_2</th>\n",
       "      <th>column_3</th>\n",
       "      <th>column_4</th>\n",
       "      <th>column_5</th>\n",
       "      <th>column_6</th>\n",
       "      <th>column_7</th>\n",
       "      <th>column_8</th>\n",
       "      <th>column_9</th>\n",
       "      <th>column_10</th>\n",
       "      <th>column_11</th>\n",
       "      <th>column_12</th>\n",
       "      <th>column_13</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>14.23</td>\n",
       "      <td>1.71</td>\n",
       "      <td>2.43</td>\n",
       "      <td>15.6</td>\n",
       "      <td>127</td>\n",
       "      <td>2.80</td>\n",
       "      <td>3.06</td>\n",
       "      <td>0.28</td>\n",
       "      <td>2.29</td>\n",
       "      <td>5.64</td>\n",
       "      <td>1.04</td>\n",
       "      <td>3.92</td>\n",
       "      <td>1065</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>13.20</td>\n",
       "      <td>1.78</td>\n",
       "      <td>2.14</td>\n",
       "      <td>11.2</td>\n",
       "      <td>100</td>\n",
       "      <td>2.65</td>\n",
       "      <td>2.76</td>\n",
       "      <td>0.26</td>\n",
       "      <td>1.28</td>\n",
       "      <td>4.38</td>\n",
       "      <td>1.05</td>\n",
       "      <td>3.40</td>\n",
       "      <td>1050</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>13.16</td>\n",
       "      <td>2.36</td>\n",
       "      <td>2.67</td>\n",
       "      <td>18.6</td>\n",
       "      <td>101</td>\n",
       "      <td>2.80</td>\n",
       "      <td>3.24</td>\n",
       "      <td>0.30</td>\n",
       "      <td>2.81</td>\n",
       "      <td>5.68</td>\n",
       "      <td>1.03</td>\n",
       "      <td>3.17</td>\n",
       "      <td>1185</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>14.37</td>\n",
       "      <td>1.95</td>\n",
       "      <td>2.50</td>\n",
       "      <td>16.8</td>\n",
       "      <td>113</td>\n",
       "      <td>3.85</td>\n",
       "      <td>3.49</td>\n",
       "      <td>0.24</td>\n",
       "      <td>2.18</td>\n",
       "      <td>7.80</td>\n",
       "      <td>0.86</td>\n",
       "      <td>3.45</td>\n",
       "      <td>1480</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>13.24</td>\n",
       "      <td>2.59</td>\n",
       "      <td>2.87</td>\n",
       "      <td>21.0</td>\n",
       "      <td>118</td>\n",
       "      <td>2.80</td>\n",
       "      <td>2.69</td>\n",
       "      <td>0.39</td>\n",
       "      <td>1.82</td>\n",
       "      <td>4.32</td>\n",
       "      <td>1.04</td>\n",
       "      <td>2.93</td>\n",
       "      <td>735</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   column_0  column_1  column_2  column_3  column_4  column_5  column_6  \\\n",
       "0         1     14.23      1.71      2.43      15.6       127      2.80   \n",
       "1         1     13.20      1.78      2.14      11.2       100      2.65   \n",
       "2         1     13.16      2.36      2.67      18.6       101      2.80   \n",
       "3         1     14.37      1.95      2.50      16.8       113      3.85   \n",
       "4         1     13.24      2.59      2.87      21.0       118      2.80   \n",
       "\n",
       "   column_7  column_8  column_9  column_10  column_11  column_12  column_13  \n",
       "0      3.06      0.28      2.29       5.64       1.04       3.92       1065  \n",
       "1      2.76      0.26      1.28       4.38       1.05       3.40       1050  \n",
       "2      3.24      0.30      2.81       5.68       1.03       3.17       1185  \n",
       "3      3.49      0.24      2.18       7.80       0.86       3.45       1480  \n",
       "4      2.69      0.39      1.82       4.32       1.04       2.93        735  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 利用pandas导入csv数据，查看前5行导入结果看是否正常\n",
    "import pandas as pd\n",
    "credit_df = pd.read_csv('d:/work/homework/wine.txt', header=None)\n",
    "#源DataFrame中是没有索引的，此处加上索引\n",
    "new_column_names =[f'column_{i}' for i in range(14)]\n",
    "credit_df.columns = new_column_names\n",
    "credit_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "1c5ab666-240c-40b0-b061-09d80ce06cf3",
   "metadata": {},
   "outputs": [],
   "source": [
    "df = credit_df.drop(columns=['column_0'])\n",
    "# 转为array\n",
    "\n",
    "#将 DataFrame df 转换为一个 NumPy 数组，并将这个数组赋值给变量 X_ori。.values 属性用于从 DataFrame 中提取底层的 NumPy 数组\n",
    "X_ori=df.values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "0994cf90-9567-44ba-bdcc-77d8aa3377d6",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 标准化\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "std = StandardScaler()\n",
    "X = std.fit_transform(X_ori*1.0)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "71dcb180-c8d2-40c7-bbe4-35a715585061",
   "metadata": {},
   "source": [
    "## PCA降维"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "30b9d81c-4928-493a-9634-b887e476e023",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd \n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.decomposition import PCA\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "7af9a342-dda0-4823-bb37-4eaf290ef6b4",
   "metadata": {},
   "outputs": [],
   "source": [
    "# number of components:最终维数的数量，用两个维数有效整合了原来四个维度的信息\n",
    "pca = PCA(n_components=2)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "44f6894f-09d4-4f34-ba9f-ae65c2709dcb",
   "metadata": {},
   "source": [
    "#pca.fit(x) 计算 x 数据的主成分，即找到那些方向上数据方差最大的方向\n",
    "#pca.transform(x) 将原始数据 x 投影到这些主成分上，得到新的数据表示\n",
    "#转换后的数据被存储在变量 principalComponents 中\n",
    "\n",
    "principalComponents = pca.fit_transform(X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "1826ca7a-3851-4863-b198-42600c029acb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>principal component 1</th>\n",
       "      <th>principal component 2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3.316751</td>\n",
       "      <td>-1.443463</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2.209465</td>\n",
       "      <td>0.333393</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2.516740</td>\n",
       "      <td>-1.031151</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3.757066</td>\n",
       "      <td>-2.756372</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.008908</td>\n",
       "      <td>-0.869831</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   principal component 1  principal component 2\n",
       "0               3.316751              -1.443463\n",
       "1               2.209465               0.333393\n",
       "2               2.516740              -1.031151\n",
       "3               3.757066              -2.756372\n",
       "4               1.008908              -0.869831"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "principalDf = pd.DataFrame(data = principalComponents\n",
    "             , columns = ['principal component 1', 'principal component 2'])\n",
    "\n",
    "principalDf.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5ab47fcc-661a-4eb5-9dd4-0a65b1cb8ae3",
   "metadata": {},
   "source": [
    "## 做层状聚类图、肘状图（认为有3类）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "a94ab7bb-815a-44e4-9470-f6b5fe6e2651",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import scipy\n",
    "from scipy.cluster import hierarchy\n",
    "dendro=hierarchy.dendrogram(hierarchy.linkage(principalDf,method='ward'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "5c6c7a3a-8848-49bc-be79-def43890c8b8",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\anacoda\\anacoda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:870: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n",
      "  warnings.warn(\n",
      "D:\\anacoda\\anacoda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1382: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n",
      "D:\\anacoda\\anacoda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:870: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n",
      "  warnings.warn(\n",
      "D:\\anacoda\\anacoda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1382: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n",
      "D:\\anacoda\\anacoda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:870: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n",
      "  warnings.warn(\n",
      "D:\\anacoda\\anacoda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1382: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n",
      "D:\\anacoda\\anacoda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:870: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n",
      "  warnings.warn(\n",
      "D:\\anacoda\\anacoda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1382: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n",
      "D:\\anacoda\\anacoda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:870: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n",
      "  warnings.warn(\n",
      "D:\\anacoda\\anacoda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1382: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n",
      "D:\\anacoda\\anacoda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:870: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n",
      "  warnings.warn(\n",
      "D:\\anacoda\\anacoda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1382: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n",
      "D:\\anacoda\\anacoda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:870: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n",
      "  warnings.warn(\n",
      "D:\\anacoda\\anacoda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1382: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n",
      "D:\\anacoda\\anacoda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:870: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n",
      "  warnings.warn(\n",
      "D:\\anacoda\\anacoda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1382: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n",
      "D:\\anacoda\\anacoda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:870: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n",
      "  warnings.warn(\n",
      "D:\\anacoda\\anacoda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1382: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'wcss: sum of dist. of sample to their closest cluster center')"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.cluster import KMeans\n",
    "wcss=[]\n",
    "for i in range(1,10):\n",
    "    kmeans=KMeans(n_clusters=i,init='k-means++',)\n",
    "    kmeans.fit(principalDf)\n",
    "    wcss.append(kmeans.inertia_)\n",
    "    \n",
    "plt.plot(range(1,10),wcss)\n",
    "plt.title('Elbow Method')\n",
    "plt.xlabel('No. of cluster')\n",
    "plt.ylabel('wcss: sum of dist. of sample to their closest cluster center' )"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9c99ca40-b83e-4099-8a62-a87fc57a296b",
   "metadata": {},
   "source": [
    "## kmeans聚类并给出准确率"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "e213f65c-e230-497e-89cf-5ffde7a51f8e",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\anacoda\\anacoda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:870: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n",
      "  warnings.warn(\n",
      "D:\\anacoda\\anacoda\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1382: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n"
     ]
    }
   ],
   "source": [
    "kmeans_1=KMeans(n_clusters=3)\n",
    "kmeans_1.fit(principalDf)\n",
    "cluster_pred=kmeans_1.predict(principalDf)\n",
    "cluster_pred_2=kmeans_1.labels_\n",
    "cluster_center=kmeans_1.cluster_centers_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "2dce9ad9-7656-4051-9457-763ab48b478d",
   "metadata": {},
   "outputs": [],
   "source": [
    "cluster = pd.DataFrame(cluster_pred,columns=['cluster'])\n",
    "df_cluster = pd.concat([principalDf,cluster],axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "59145c44-4716-4927-85db-e8e542d022ae",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2,\n",
       "       2, 2, 2, 2, 2, 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2,\n",
       "       2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n",
       "       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,\n",
       "       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
       "       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
       "       1, 1])"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cluster_pred"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "74408f51-7054-4486-b894-d5607a7f9471",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 观察数字对应的类别\n",
    "df_cluster.to_csv('path_to_file.csv', index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "3d360aa5-2f31-4ebe-adf9-fd0f2537492f",
   "metadata": {},
   "outputs": [],
   "source": [
    "credit_df.to_csv('path_to_file_1.csv', index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "cdb6f07d-a92c-4361-8b41-c5645a7ae806",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Precision: 0.97\n"
     ]
    }
   ],
   "source": [
    "true_positives = 0  # 正确分类的样本数\n",
    "false_positives = 0  # 错误分类的样本数\n",
    "\n",
    "for i in range(178):\n",
    "    if credit_df['column_0'][i] == 1 and df_cluster['cluster'][i] == 0:\n",
    "        true_positives += 1\n",
    "    elif credit_df['column_0'][i] == 2 and df_cluster['cluster'][i] == 2:\n",
    "        true_positives += 1\n",
    "    elif credit_df['column_0'][i] == 3 and df_cluster['cluster'][i] == 1:\n",
    "        true_positives += 1\n",
    "    else:\n",
    "        false_positives += 1\n",
    "\n",
    "# 计算精确度\n",
    "precision = true_positives / (true_positives + false_positives) if (true_positives + false_positives) > 0 else 0\n",
    "\n",
    "print(f\"Precision: {precision:.2f}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d63ae857-61f3-40ef-b8d1-355500f240b1",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
